#include "tempSensor.h"
#include "log.h"
/**
  * @brief  温度测试程序，本程序通过热敏电阻，测的环境温度.

  */
#define TAG "TEMP:"
#define LOG_LOCAL_LEVEL 3

/**
  * @brief  初始化热敏电阻IO
  * @param  None
  * @retval None
  */
void temp_sensor_init(void)
{
    adc_init (); //��ʼ��ADC3
}
/**
  * @brief  获取温度值，其中由于是12bit的AD,所以AD能采集到最大值为4096
  * @param  None
  * @retval None
  */
u8 temp_get_val (void)
{
    u16 temp_val = 0;
    //循环采集10次，求平均值
    for (u8 t = 0; t < LSENS_READ_TIMES; t++) {
            temp_val += get_adc ();//获取AD采集的值
            delay_us (100);
    }
    /*
     * temp_val / 4096 = U0 / 3.3
     * U0 = temp_val *3.3 / 4096;
     * */
    temp_val /= LSENS_READ_TIMES;	//�õ�ƽ��ֵ

    //float u0 = temp_val * 33 /(10.0f);
    //float u00 = u0 /(4096.0f);
    /*
     * u00 =  U0;
     * 3.3*Rz/(Rz+47K) = u00
     * 3.3*Rz = u00 (Rz+47K)
     * 3.3*Rz = u00*Rz + u00 * 47K
     * (3.3 - u00)Rz = u00 * 47K
     * Rz = u00 * 47K /(3.3 - u00)
     * Rz = temp_val *3.3/4096 * 47K / (3.3 - temp_val*3.3/4096)
     * Rz = temp_val *3.3*47/ (4096 * 3.3 - temp_val *3.3)
     * */
    //float rr = 10*u00*47*1000 /(33.0f-10.0f*u00);
    //float rz = temp_val * 3.3f * 47 / (4096 * 3.3f - temp_val * 3.3f);

    //如果找过最大值，就按最大4096来算
    if (temp_val >= 4090)
        temp_val = 4090;
    //下面这个公式就是根据电阻分压计算所得
    //float rz = 47000.0f/((4096/temp_val) - 1);
    //尽量少的使用除法，确定使用下面方法，准确度高很多。
    float rz = (47000.0f * temp_val)/(4096 - temp_val);

    u32 ttt = (u32) rz;
    //LOGI("temp:%d,u0:%d,r:%d,rz:%d",temp_val,u0*1000,(u32)rr,ttt);

    LOGI("temp_val:%d,rz:%d", temp_val, ttt);
    //通过查表获取到温度值
    return temp_search ((u32)(rz*10.0f));
    //return (u8) (100 - (temp_val / 40));
}












